package thread;

/**
 * @author SWJ
 * @create 2021-06-25 16:06
 * 创建匿名内部类
 */
public class TestInner5 {
    public static void main(String[] args) {
        //匿名内部类
        new Inner() {//匿名对象
            @Override
            public void save() {
                System.out.println("接口1");
            }

            @Override
            public void a() {
                System.out.println("接口a");
            }
        }.a();//调用a()
        //书写比较简便

        //3.3触发指定的重写后的方法，只能调用一个，并且只能调用一次
        /*注意！！！匿名对象只使用一次，而且一次只能干一件事！！！*/

        //5.new Inner2()匿名对象，相当于创建了抽象类的普通子类
        /*匿名内部类实现的方法都是抽象方法，注意是所有抽象方法*/
        new Inner2() {
            @Override
            public void drink() {
                System.out.println("我是Inner2抽象类的drink()");
            }
        }.drink();

        //7.普通类的匿名对象，不会强制要求产生匿名内部类的重写方法
        //如果使用对象，只需要干一件事--可以直接创建匿名对象，简单又方便
        //创建实例化对象
        new Inner3().power();

        //如果想使用同一个对象来干很多件事情，必须要给对象起名字
        //普通实例化
        Inner3 i3 = new Inner3();
        i3.power();
        i3.study();

    }

}

/**
 * 创建接口
 */
interface Inner {
    //定义接口中的抽象方法
    //可以简写
    void save();
    void a();
}

//4.创建抽象类
abstract class Inner2 {
    public void play() {
        System.out.println("我是Inner2抽象类中的普通方法play()");
    }

    abstract public void drink();
}

//6.创建普通类Inner3
class Inner3 {
    public void power() {
        System.out.println("power方法");
    }

    public void study() {
        System.out.println("study方法");
    }
}